#include<unistd.h>
#include<stdio.h>
#include<sys/file.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

/*
先获取文件的锁，然后fork出两个进程，子进程直接退出（释放锁），父进程的行为根据29行注释是否去除而定：
1.  如果注释去除，则父进程循环输出字符串到文件，并不释放锁。这样子就算
*/
int main() {
  int fd = open("a.txt", O_CREAT| O_WRONLY, 0666);
  flock(fd, LOCK_EX);
  int ret = fork();

  if (ret == 0) {
    // Child process code block.
    printf("child exit.");
    return 0;  // 子进程直接退出, 此时父进程仍持有锁.

  } else {
    // Parent process code block.
    while(1) {
      printf("sleep 10\n");
      fflush(stdout);
      write(fd, "aaaa", 4);
      sleep(10);
      /* 下行注释可添加或去除，用于对比。10秒后父进程退出, 释放锁 */
      // return 0;
    }
  }

}
